package answer;

/**
 * 定义一个学生类 Student，它继承自 Person 类。 
（1）Person类：
成员变量（私有的）：
	姓名（name)，字符串类型(String)；
	性别(sex)，字符型(char)；
	年龄(age)，整型(int)。
成员方法：
	构造方法：对所有成员变量初始化
	重写Object类的toString方法，返回字符串形如：姓名，性别，年龄
	重写Object类的equals方法，当且仅当两人的姓名相等且性别相等且年龄相等时，认为两人相等。
（2）Student 类： 
新增加的成员变量： 
	学号(number)，长整型；
	三门功课的成绩：哲学(phi)，整型；
	英语 (eng)，整型；
	计算机(comp)，整型。 
新增加的方法：
	求三门功课的平均成绩 public double aver()：该方法没有参数，返 回值类型为 double 型；
	求三门功课成绩的最高分 public int max()：该方法没有参数，返回值为 int 型；
	求三门功课成绩的最低分 public int min()：该方法没有参数，返回值为 int 型。 
	覆盖父类的同名方法：public String toString()：获取学号、姓名、性别、平均分、最高分、最低分信息。 
	覆盖父类的同名方法equals：除了姓名、性别和年龄相等以外，学号也相等时，认为两学生相等。
（3）编写测试程序。程序要求实现：在程序中设置若干个学生信息（学号、姓名、性别、年龄、各科分数），要求通过运行程序，在屏幕中输出如下的结果：例如：学号：200501 姓名：李丽 性别：女 年龄：20 平均分：90.0 最高分：95 分 最低分:87。 试着比较两名学生是否相等。

 */

public class Answer18 {
	public static void main(String[] args) {
		new Person("Tom", '男', 18);
		System.out.println(new Student1("Tom", '男', 18, 10121, 52, 35, 453).toString());
	}
}

// (1)Person类
class Person {
	/*
	 * 姓名（name)，字符串类型(String)； 性别(sex)，字符型(char)； 年龄(age)，整型(int)。
	 */
	private String name;
	private char sex;
	private int age;

	Person(String name, char sex, int age) {
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]";
	}

	public boolean equals(Object obj) {
		boolean flag = false;
		if (obj == null) {
			flag = false;
		} else if (obj instanceof Person) {
			Person s = (Person) obj;

			if (this.getName().equals(s.getName()) && this.getSex() == s.getSex() && this.getAge() == s.getAge()) {
				flag = true;
			} else {
				flag = false;
			}
			return flag;
		}
		return flag;
	}

	public String getName() {
		return name;
	}

	public char getSex() {
		return sex;
	}

	public int getAge() {
		return age;
	}
}

// (2)student类
class Student1 extends Person {
	/*
	 * 学号(number)，长整型； 三门功课的成绩：哲学(phi)，整型； 英语 (eng)，整型； 计算机(comp)，整型。
	 */
	private long number;
	private int phi;
	private int eng;
	private int comp;

	public Student1(String name, char sex, int age, long number, int phi, int eng, int comp) {
		super(name, sex, age);
		this.number = number;
		this.phi = phi;
		this.eng = eng;
		this.comp = comp;
	}

	public double aver() {
		return (phi + eng + comp) / 3;
	}

	public int max() {
		int max;
		max = phi > eng ? phi : eng;
		max = comp > max ? comp : max;
		return max;

	}

	public int min() {
		int min;
		min = phi < eng ? phi : eng;
		min = comp < min ? comp : min;
		return min;
	}

	@Override
	public String toString() {
		return "Student [name=" + super.getName() + ", sex=" + super.getSex() + ", age=" + super.getAge() + ", number="
				+ number + ", aver=" + aver() + ", max=" + max() + ", min=" + min() + "]";
	}
}
